<?php

class PerfilController extends BaseController {
	
	public function indexAction() {
		
		echo $this->view->perfil = 'Perfil';
	}
	
	public function editarAction(){
    	$id = $this->_getParam('id');
    	
    	$model = new Application_Model_Perfil();
    	$perfil = $model->fetchAll("id = $id")->current();
        
    	$this->view->form = new Form_Perfis_Perfil();
    	
    	$dadosPerfil = $perfil->toArray();
    	unset($dadosPerfil['descricao']);
		$this->view->form->populate($dadosPerfil);
		$this->view->form->descricao->setValue($perfil['descricao']);
		$permissoesModel = new Application_Model_Permissao();
		$permissoes = $permissoesModel->fetchAll("perfil_id = $id");
		
		$modelFuncao = new Application_Model_Funcionalidade();
		$funcoes = $modelFuncao->fetchAll();
		foreach ($funcoes as $valor){
			$this->view->form->perfilfuncao->addMultiOption($valor->id,$valor->descricao);
		}
		$permissoesselecionadas = array();
		foreach ($permissoes as $permissao){
			$permissoesselecionadas[] = $permissao['funcionalidade_id'];
		}
		
		$this->view->form->perfilfuncao->setValue($permissoesselecionadas);
		$this->view->id = $id;
		
    	if ($this->getRequest()->isPost()){
           $this->_gravar($this->getRequest()->getParams());
       	}
	}
	
	public function _gravar($parametros){
		if ($this->getRequest()->getPost() && $this->view->form->isValid($parametros)){
			
			$permissaoModel = new Application_Model_Permissao();
			$permissaoModel->delete('perfil_id =' . $parametros['id']);
			foreach ($parametros['perfilfuncao'] as $valor){
				$funcao = array('perfil_id' => $parametros['id'], 
							    'funcionalidade_id' => $valor);
			$permissaoModel->createRow($funcao)->save();
			}
			unset($parametros['perfilfuncao']);
			$perfilModel = new Application_Model_Perfil();
			$perfil = $perfilModel->find($this->_getParam('id'))->current();
			$perfil->setFromArray($parametros);
			$perfil->save();
		    $this->_helper->redirector('index','perfil');
			
		}
	}
	
	public function cadastrarAction(){
			    	
	    	$model = new Application_Model_Perfil();
	    	        
	    	$this->view->form = new Form_Perfis_Perfil();
	    	$modelFuncao = new Application_Model_Funcionalidade();
			$funcoes = $modelFuncao->fetchAll();
			foreach ($funcoes as $valor){
				$this->view->form->perfilfuncao->addMultiOption($valor->id,$valor->descricao);
			}
			if ($this->getRequest()->getPost() && $this->view->form->isValid($this->_getAllParams()) ){
			
				$resultado = $this->_salvar($this->_getAllParams());
				if($resultado === true) {
					$this->_helper->flashMessenger('Perfil salvo com sucesso');
					$this->_helper->redirector('index','perfil');	
				}
				else{
					
					$this->_helper->flashMessenger($resultado);
					$this->_helper->redirector('cadastrar','perfil');
				}
			}
	}
	private function _salvar($array){
			if($this->_checarPerfilDuplicado($array['descricao'])){
				return 'Falha ao Cadastrar. Este Perfil já está em uso.';
			}
						
			$perfilModel = new Application_Model_Perfil();
			$perfil = $perfilModel->createRow ($this->_getAllParams());
			$perfil->save();
			return true;
	}
	private function _checarPerfilDuplicado($perfil){
			$rowset = $this->_getModel()->fetchAll("descricao = '$perfil'");
			if (count($rowset) > 0){
			return true;
			}
			return false;
	}
	private function _getModel(){
		return new Application_Model_Perfil ();
	}
	public function excluirAction(){
			$id = $this->_getParam('id');
			$model = new Application_Model_Perfil();
			try {
				$model->getAdapter()->beginTransaction();
				$perfil = $model->fetchRow("id = $id");
				$permissoesModel = new Application_Model_Permissao();
				$permissoes = $permissoesModel->fetchRow("perfil_id = $id");
				if ($permissoes <> null){
				$permissoes->delete();	
				}
				$perfil->delete();
				$this->_helper->flashMessenger('Perfil Excluído com sucesso');
		    	$model->getAdapter()->commit();
		    	
				$this->_helper->redirector('index','perfil');	
			} catch (Exception $e) {
				$this->_helper->flashMessenger('Houve um erro na exclusão');
	    		$model->getAdapter()->rollBack();
    		}
    		die();
	}

}

